A workstation controller handles the I/O operations between a host computer and a plurality of I/O devices (displays, printers, plotters, etc). Typically, if the host wanted to send data to a device, the host would send a data stream to the workstation controller. The controller figures out which device the data is intended for, processes the data stream, and sends the data to the device.
Often the device the host wants to send data to is a display. Sometimes, the host wants to send an entire screen of data to the display. But other times, the host only wants to update a small portion of the screen.
Modern day workstation controllers do not differentiate between sending a large amount of data to a device and sending a small amount of data to a device. A first group of controllers always sends a full screen of data to a display, even if the host only wanted to update a small portion of the screen. These controllers must read the screen prior to the write operation or store complete copies of the screens of each display. Although this method is efficient if the host wanted to send a full screen of data, it is inefficient if the host only wanted to send a partial screen of data.
A second group of controllers always sends multiple partial screens of data to the display even if the host wanted to send an entirely new full screen to the display. These controllers must send multiple partial screens of data to the display and wait for the display to process each one before a full screen is finally received. Although this method is efficient if the host wanted to send a small amount of data, it is inefficient if the host wanted to send a full screen of data.
It would be desirable for a controller to have the ability to operate like the first group of controllers when a full screen of data is being sent to the display, but operate like the second group of controllers when a partial screen of data is being sent to the display. Ideally, this controller could analyze the incoming data stream and determine if it contained a full screen of data or a partial screen of data. If it detected a full screen of data, the controller could switch to full screen mode. If it detected a partial screen of data, the controller could switch to partial screen mode.